www.gusucode.com > VC++ 电力学校学员管理系统(Access)-源码程序 > VC++ 电力学校学员管理系统(Access)-源码程序/code/AutoStuMisDoc.cpp

    //Download by http://www.NewXing.com
// AutoStuMisDoc.cpp : implementation of the CAutoStuMisDoc class
//

#include "stdafx.h"
#include "AutoStuMis.h"
#include "RstStudent.h"
#include "RstStudentType.h"
#include "RstExamType.h"
#include "Class.h"
#include "RstClass.h"
#include "RstClassList.h"

#include "AutoStuMisDoc.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAutoStuMisDoc

IMPLEMENT_DYNCREATE(CAutoStuMisDoc, CDocument)

BEGIN_MESSAGE_MAP(CAutoStuMisDoc, CDocument)
	//{{AFX_MSG_MAP(CAutoStuMisDoc)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CAutoStuMisDoc construction/destruction

CAutoStuMisDoc::CAutoStuMisDoc()
{
	// TODO: add one-time construction code here

}

CAutoStuMisDoc::~CAutoStuMisDoc()
{
	FreeAllData();
}

BOOL CAutoStuMisDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	// TODO: add reinitialization code here
	// (SDI documents will reuse this document)
	CAutoStuMisApp *pApp=(CAutoStuMisApp*)AfxGetApp();
	pApp->m_pDoc = this;

	ReadInitData();

	return TRUE;
}



/////////////////////////////////////////////////////////////////////////////
// CAutoStuMisDoc diagnostics

#ifdef _DEBUG
void CAutoStuMisDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CAutoStuMisDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CAutoStuMisDoc commands

void CAutoStuMisDoc::ReadInitData()
{
	BeginWaitCursor();

	CItem *pItem;

	CRstStudentType rsSt;
	rsSt.Open();
	while(!rsSt.IsEOF())
	{
		pItem = new CItem;
		pItem->m_F_ID = rsSt.m_F_ID;
		pItem->m_F_ItemName = rsSt.m_F_ItemName;
		m_arrStudentType.Add(pItem);
		rsSt.MoveNext();
	}
	rsSt.Close();

	CRstExamType rsExam;
	rsExam.Open();
	while(!rsExam.IsEOF())
	{
		pItem = new CItem;
		pItem->m_F_ID = rsExam.m_F_ID;
		pItem->m_F_ItemName = rsExam.m_F_ItemName; 
		m_arrExamType.Add(pItem);
		rsExam.MoveNext();
	}
	rsExam.Close();
	
	CStudent *pStu;
	CRstStudent rsStudent;
	rsStudent.Open();
	while(!rsStudent.IsEOF())
	{
		pStu = new CStudent;
		pStu->m_F_ID = rsStudent.m_F_ID;
		pStu->m_F_Address = rsStudent.m_F_Address;
		pStu->m_F_AutoNo = rsStudent.m_F_AutoNo;
		pStu->m_F_Date = rsStudent.m_F_Date;
		pStu->m_F_ItemName = rsStudent.m_F_Name;
		pStu->m_F_Sex = rsStudent.m_F_Sex;
		pStu->m_F_SN = rsStudent.m_F_SN;
		pStu->m_F_Tel = rsStudent.m_F_Tel;
		pStu->m_F_TypeID = rsStudent.m_F_TypeID;
		pStu->m_F_Remark = rsStudent.m_F_Remark;
		m_arrStudent.Add(pStu);
		rsStudent.MoveNext();
	}
	rsStudent.Close();

	EndWaitCursor();
}

CItem* CAutoStuMisDoc::GetItemByID(CObArray *pArr, long nID)
{
	ASSERT(pArr);
	CItem *pItem=NULL;
	for(int i=0;i<pArr->GetSize();i++)
	{
		pItem = (CItem*)pArr->GetAt(i);
		if(pItem->m_F_ID == nID)
			return pItem;
	}
	return NULL;
}

int CAutoStuMisDoc::FillItemsToComboBox(CComboBox *pcbo, CObArray *pArr)
{
	ASSERT(pArr);
	pcbo->ResetContent();
	int iPos=0;
	CItem *pItem;
	for(int i= 0;i<pArr->GetSize();i++)
	{
		pItem = (CItem*)pArr->GetAt(i);
		if(pItem)
		{
			iPos = pcbo->InsertString(pcbo->GetCount(),pItem->m_F_ItemName);
			pcbo->SetItemData(iPos,pItem->m_F_ID);
		}
	}
	if(pcbo->GetCount()>0)
		pcbo->SetCurSel(0);
	return pcbo->GetCount();
}

void CAutoStuMisDoc::FreeAllData()
{
	CItem *pItem;
	CStudent *pStu;
	for(int i=0;i<m_arrExamType.GetSize();i++)
	{
		pItem = m_arrExamType.GetAt(i);
		delete pItem;
	}
	m_arrExamType.RemoveAll();
	for(i=0;i<m_arrStudentType.GetSize();i++)
	{
		pItem = m_arrStudentType.GetAt(i);
		delete pItem;
	}
	m_arrStudentType.RemoveAll();
	for(i=0;i<m_arrStudent.GetSize();i++)
	{
		pStu = m_arrStudent.GetAt(i);
		delete pStu;
	}
	m_arrStudent.RemoveAll();
	FreeAllClass();
}

int CAutoStuMisDoc::FillStudentsToListctrl(CListCtrl *pListCtrl, CString sSex, CString sName)
{
	ASSERT(pListCtrl);
	pListCtrl->DeleteAllItems();
	while(pListCtrl->DeleteColumn(0)){}
	LV_ITEM lvitem;
	CStudent *pStu;
	CItem *pItem;
	CString sTmp;
	int i=0,iPos=0;
	pListCtrl->InsertColumn(0,"*",LVCFMT_LEFT,30,-1);
	pListCtrl->InsertColumn(1,"姓名",LVCFMT_LEFT,80,-1);
	pListCtrl->InsertColumn(2,"性别",LVCFMT_LEFT,50,-1);
	pListCtrl->InsertColumn(3,"身份证",LVCFMT_LEFT,130,-1);
	pListCtrl->InsertColumn(4,"联系地址",LVCFMT_LEFT,150,-1);
	pListCtrl->InsertColumn(5,"电话",LVCFMT_LEFT,100,-1);
	pListCtrl->InsertColumn(6,"日期",LVCFMT_LEFT,80,-1);
	pListCtrl->InsertColumn(7,"车号",LVCFMT_LEFT,80,-1);
	pListCtrl->InsertColumn(8,"类别",LVCFMT_LEFT,80,-1);
	pListCtrl->InsertColumn(9,"备注",LVCFMT_LEFT,200,-1);
	BOOL bShow=false;
	for(i = 0;i<m_arrStudent.GetSize();i++)
	{
		lvitem.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_PARAM;
		lvitem.iItem = pListCtrl->GetItemCount();
		lvitem.iSubItem = 0;
		sTmp.Format("%d",pListCtrl->GetItemCount()+1);
		lvitem.pszText = sTmp.GetBuffer(MAX_PATH) ;
		lvitem.iImage = 0;
		pStu = m_arrStudent.GetAt(i);
		if(pStu)
		{
			bShow = true;
			if(!sSex.IsEmpty())
			{
				bShow = (pStu->m_F_Sex.Compare(sSex)==0);
			}
			if(!sName.IsEmpty())
			{
				bShow = (pStu->m_F_ItemName.Find(sName,0)>=0);
			}
			//*/姓名/性别/身份证/联系地址/电话/日期/车号/类别/备注
			if(bShow)
			{
				iPos = pListCtrl->InsertItem(&lvitem);
				pListCtrl->SetItemText(iPos,1,pStu->m_F_ItemName);
				pListCtrl->SetItemText(iPos,2,pStu->m_F_Sex);
				pListCtrl->SetItemText(iPos,3,pStu->m_F_SN);
				pListCtrl->SetItemText(iPos,4,pStu->m_F_Address);
				pListCtrl->SetItemText(iPos,5,pStu->m_F_Tel);
				sTmp.Format("%d-%d-%d",pStu->m_F_Date.GetYear(),pStu->m_F_Date.GetMonth(),pStu->m_F_Date.GetDay());
				pListCtrl->SetItemText(iPos,6,sTmp);
				pListCtrl->SetItemText(iPos,7,pStu->m_F_AutoNo);
				pItem = GetItemByID(&m_arrStudentType,pStu->m_F_TypeID);  
				if(pItem)
					pListCtrl->SetItemText(iPos,8,pItem->m_F_ItemName);
				pListCtrl->SetItemText(iPos,9,pStu->m_F_Remark);
				pListCtrl->SetItemData(iPos,pStu->m_F_ID);
			}
		}
	}
	return pListCtrl->GetItemCount();
}

int CAutoStuMisDoc::ReadClasss(CTime tmStart, CTime tmEnd,CString sAutoNo,CString sTeacher)
{
	FreeAllClass();
	CRstClass rsBill;
	CClass *pClass;
	if(sAutoNo.IsEmpty())
		sAutoNo = '%';
	if(sTeacher.IsEmpty())
		sTeacher = '%';
	if(tmStart>0 && tmEnd>0)
	{
		rsBill.m_strFilter.Format("F_Date>=#%d-%d-%d# And F_Date<=#%d-%d-%d# And F_AutoNo Like '%s' And F_Teacher Like '%s'",
			tmStart.GetYear(),tmStart.GetMonth(),tmStart.GetDay(),
			tmEnd.GetYear(),tmEnd.GetMonth(),tmEnd.GetDay(),
			sAutoNo,sTeacher);
	}
	else
		rsBill.m_strFilter.Format("F_AutoNo Like '%s' And F_Teacher Like '%s'",sAutoNo,sTeacher);
	rsBill.m_strSort = "F_Date,F_Noon";
	rsBill.Open();
	while(!rsBill.IsEOF())
	{
		pClass = new CClass;
		pClass->m_F_AutoNo = rsBill.m_F_AutoNo;
		pClass->m_F_Date = rsBill.m_F_Date;
		pClass->m_F_ID = rsBill.m_F_ID;
		pClass->m_F_NoonID = rsBill.m_F_Noon;
		pClass->m_F_Remark = rsBill.m_F_Remark;
		pClass->m_F_Teacher = rsBill.m_F_Teacher;
		m_arrClass.Add(pClass);
		rsBill.MoveNext();
	}
	rsBill.Close();
	//明细
	CRstClassList rsSub;
	CStudent *pStu,*pStu1;
	rsSub.m_strSort = "F_ClassID,F_ID";
	rsSub.Open();
	while(!rsSub.IsEOF())
	{
		pClass = (CClass*)GetItemByID(&m_arrClass,rsSub.m_F_ClassID);
		if(pClass)
		{
			pStu1 = (CStudent*)GetItemByID(&m_arrStudent,rsSub.m_F_StudentID);
			if(pStu1)
			{
				pStu = new CStudent;
				pStu->m_F_Address = pStu1->m_F_Address;
				pStu->m_F_AutoNo = pStu1->m_F_AutoNo;
				pStu->m_F_Date = pStu1->m_F_Date;
				pStu->m_F_ID = pStu1->m_F_ID;
				pStu->m_F_ItemName = pStu1->m_F_ItemName;
				pStu->m_F_Remark = pStu1->m_F_Remark;
				pStu->m_F_Sex = pStu1->m_F_Sex;
				pStu->m_F_SN = pStu1->m_F_SN;
				pStu->m_F_Tel = pStu1->m_F_Tel;
				pStu->m_F_TypeID = pStu1->m_F_TypeID;

				pStu->m_nExamTypeID = rsSub.m_F_ExamTypeID;
				pStu->m_tmEnd = rsSub.m_F_DateEnd;
				pStu->m_tmExamField = rsSub.m_F_DateField;
				pStu->m_tmExamRoad = rsSub.m_F_DateRoad;
				pStu->m_tmUpAuto = rsSub.m_F_DateUpAuto;
				
				pClass->m_arrStudent.Add(pStu);
			}
		}
		rsSub.MoveNext();
	}
	rsSub.Close();

	return m_arrClass.GetSize();
}

void CAutoStuMisDoc::FreeAllClass()
{
	for(int i=0;i<m_arrClass.GetSize();i++)
	{
		delete m_arrClass[i];
	}
	m_arrClass.RemoveAll();
}